package cn.springbook.common.core.config.convert;

import cn.springbook.common.core.constant.LocalDateTimeConstant;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * <p>
 *
 * </p>
 *
 * @author: caifenglin
 * @date: 2021/7/2 17:32
 */
@Component
public class LocalDateTimeConvert implements Converter<String, LocalDateTime> {

    // 自定义函数，将字符串转Date  参1：传入的日期字符串  参2：格式参数
    public LocalDateTime parseDate(String source, String format) {
        LocalDateTime localDateTime = null;
        try {
            // 日期格式转换器
            localDateTime = LocalDateTime.parse(source, DateTimeFormatter.ofPattern(format));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return localDateTime;
    }

    @Override
    public LocalDateTime convert(String source) {
        if(StringUtils.isEmpty(source)){
            return null;
        }
        // 去除首尾空格
        source = source.trim();
        // 正则表达式判断是哪一种格式参数
        if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
            return parseDate(source, LocalDateTimeConstant.DEFAULT_DATE_TIME_PATTERN);
        } else {
            throw new IllegalArgumentException("还未定义该种字符串转LocalDateTime的日期转换格式 --> 【日期格式】：" + source);
        }
    }
}
